﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using RESTServicesCliente.Dominio;
using System.Data.SqlClient;

namespace RESTServicesCliente.Persistencia
{
    public class ClientesDAO
    {
   
        public Cliente Crear(Cliente clienteACrear)
        {
            Cliente clienteCreado = null;

            string sql = "INSERT INTO  t_cliente(dni,nombres,apellidoPaterno,apellidoMaterno,lineacredito,tarjeta, direccion, estado) VALUES (@pdni, @pnombre,@apemat,@apepat,@linecred,@ptarjeta, @direccion, @estado)";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@pdni", clienteACrear.Dni));
                    com.Parameters.Add(new SqlParameter("@pnombre", clienteACrear.Nombre));
                    com.Parameters.Add(new SqlParameter("@apemat", clienteACrear.apeMat));
                    com.Parameters.Add(new SqlParameter("@apepat", clienteACrear.apePat));
                    com.Parameters.Add(new SqlParameter("@linecred", clienteACrear.lineaCredito));
                    com.Parameters.Add(new SqlParameter("@direccion", "Av. Arequipa N° 716 - Of. 213 - Lince"));
                    com.Parameters.Add(new SqlParameter("@estado", "A"));
                    if (clienteACrear.tarjeta == null)
                    {
                        clienteACrear.tarjeta = "0";
                    }
                    com.Parameters.Add(new SqlParameter("@ptarjeta", clienteACrear.tarjeta));
                    
                    com.ExecuteNonQuery();
                }
            }
            clienteCreado = Obtener(clienteACrear.Dni);
            return clienteCreado;
        }

        public Cliente Obtener(int dni)
        {
            Cliente clienteEncontrado = null;
            string sql = "SELECT * FROM t_cliente WHERE dni=@dni";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@dni", dni));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            clienteEncontrado = new Cliente()
                            {
                                Dni = (int)resultado["dni"],
                                Nombre = (string)resultado["nombres"],
                                apeMat= (string)resultado["apellidoPaterno"],
                                apePat = (string)resultado["apellidoMaterno"],
                                lineaCredito = (decimal)resultado["lineaCredito"],
                                tarjeta = (string)resultado["Tarjeta"]
                                
                                
                            };
                        }
                    }
                }
            }
            return clienteEncontrado;
        }

        public Cliente Modificar(Cliente clienteAModificar)
        {
            Cliente clienteModificado = null;
            string sql = "UPDATE t_cliente SET nombres=@pnombre,apellidomaterno=@papemat,apellidopaterno=@papepat,lineacredito=@plineacred,tarjeta=@ptarjeta WHERE dni=@pdni";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@pdni", clienteAModificar.Dni));
                    com.Parameters.Add(new SqlParameter("@pnombre", clienteAModificar.Nombre));
                    com.Parameters.Add(new SqlParameter("@papemat", clienteAModificar.apeMat));
                    com.Parameters.Add(new SqlParameter("@papepat", clienteAModificar.apePat));
                    com.Parameters.Add(new SqlParameter("@plineacred", clienteAModificar.lineaCredito));
                    com.Parameters.Add(new SqlParameter("@ptarjeta", clienteAModificar.tarjeta));

                    com.ExecuteNonQuery();
                }
            }
            clienteModificado = Obtener(clienteAModificar.Dni);
            return clienteModificado;
        }


        public void Eliminar(Cliente cliennteAEliminar)
        {
            string sql = "DELETE FROM t_cliente WHERE dni=@pdni";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@pdni", cliennteAEliminar.Dni));
                    com.ExecuteNonQuery();
                }
            }
        }

        public List<Cliente> ListarTodos()
        {
            List<Cliente> clientesEncontrados = new List<Cliente>();
            Cliente clienteEncontrado = null;
            string sql = "SELECT * FROM t_cliente";
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        while (resultado.Read())
                        {
                            clienteEncontrado = new Cliente()
                            {
                                Dni = (int)resultado["dni"],
                                Nombre = (string)resultado["nombres"],
                                apePat = (string)resultado["apellidopaterno"],
                                apeMat =(string)resultado["apellidomaterno"],
                                lineaCredito=(decimal)resultado["lineacredito"],
                                tarjeta=(string)resultado["tarjeta"]
                            };
                            clientesEncontrados.Add(clienteEncontrado);
                        }
                    }
                }
            }
            return clientesEncontrados;
        }

    }
}